<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
 <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  <title>属性</title>

 </head>
 <body><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="language.oop5.basic.html">基本概念</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="language.oop5.constants.html">类常量</a></div>
 <div class="up"><a href="language.oop5.html">类与对象</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div><hr /><div id="language.oop5.properties" class="sect1">
  <h2 class="title">属性</h2>

  <p class="para">
   类的变量成员叫做“属性”，或者叫“字段”、“特征”，在本文档统一称为“属性”。属性声明是由关键字
   <em>public</em>，<em>protected</em> 或者
   <em>private</em> 开头，然后跟一个普通的变量声明来组成。属性中的变量可以初始化，但是初始化的值必须是常数，这里的常数是指 PHP 脚本在编译阶段时就可以得到其值，而不依赖于运行时的信息才能求值。
  </p>
  <p class="para">
   有关 <em>public</em>，<em>protected</em>
   和 <em>private</em> 的更多详细信息，请查看<a href="language.oop5.visibility.html" class="xref">访问控制（可见性）</a>。
  </p>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    为了向后兼容 PHP 4，PHP 5 声明属性依然可以直接使用关键字 <em>var</em>
    来替代（或者附加于）<em>public</em>，<em>protected</em> 或
    <em>private</em>。但是已不再需要 <em>var</em> 了。在
    PHP 5.0 到 5.1.3，<em>var</em> 会被认为是废弃的，而且抛出
    <strong><code>E_STRICT</code></strong> 警告，但是 5.1.3 之后就不再认为是废弃，也不会抛出警告。
   </p>
   <p class="para">
    如果直接使用 <em>var</em> 声明属性，而没有用
    <em>public</em>，<em>protected</em>
    或 <em>private</em> 之一，PHP 5 会将其视为 <em>public</em>。
   </p>
  </p></blockquote>
  <p class="para">
   在类的成员方法里面，可以用 <em>-&gt;</em>（对象运算符）：<var class="varname"><var class="varname">$this->property</var></var>（其中
   <em>property</em> 是该属性名）这种方式来访问非静态属性。静态属性则是用
   <em>::</em>（双冒号）：<var class="varname"><var class="varname">self::$property</var></var>
   来访问。更多静态属性与非静态属性的区别参见 <a href="language.oop5.static.html" class="link">Static 关键字</a>。
  </p>
  <p class="para">
   当一个方法在类定义内部被调用时，有一个可用的伪变量
   <var class="varname"><var class="varname">$this</var></var>。<var class="varname"><var class="varname">$this</var></var>
   是一个到主叫对象的引用（通常是该方法所从属的对象，但如果是从第二个对象<a href="language.oop5.static.html" class="link">静态</a>调用时也可能是另一个对象）。
  </p>

  <p class="para">
   <div class="example" id="example-173">
    <p><strong>Example #1 属性声明</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">SimpleClass<br /></span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;错误的属性声明<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;</span><span style="color: #0000BB">$var1&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #DD0000">'hello&nbsp;'&nbsp;</span><span style="color: #007700">.&nbsp;</span><span style="color: #DD0000">'world'</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$var2&nbsp;</span><span style="color: #007700">=&nbsp;&lt;&lt;&lt;EOD<br /></span><span style="color: #DD0000">hello&nbsp;world<br /></span><span style="color: #007700">EOD;<br />&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$var3&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">1</span><span style="color: #007700">+</span><span style="color: #0000BB">2</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$var4&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">self</span><span style="color: #007700">::</span><span style="color: #0000BB">myStaticMethod</span><span style="color: #007700">();<br />&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$var5&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">$myVar</span><span style="color: #007700">;<br /><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;正确的属性声明<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;</span><span style="color: #0000BB">$var6&nbsp;</span><span style="color: #007700">=&nbsp;</span><span style="color: #0000BB">myConstant</span><span style="color: #007700">;<br />&nbsp;&nbsp;&nbsp;public&nbsp;</span><span style="color: #0000BB">$var7&nbsp;</span><span style="color: #007700">=&nbsp;array(</span><span style="color: #0000BB">true</span><span style="color: #007700">,&nbsp;</span><span style="color: #0000BB">false</span><span style="color: #007700">);<br /><br />&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//在&nbsp;PHP&nbsp;5.3.0&nbsp;及之后，下面的声明也正确<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;</span><span style="color: #0000BB">$var8&nbsp;</span><span style="color: #007700">=&nbsp;&lt;&lt;&lt;'EOD'<br /></span><span style="color: #DD0000">hello&nbsp;world<br /></span><span style="color: #007700">EOD;<br />}<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>
   
   </div>
  </p>

  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    更多关于类／对象的处理函数，请查看<a href="ref.classobj.html" class="link">类／对象函数</a>。
   </p>
  </p></blockquote>

  <p class="para">
   跟 <a href="language.types.string.html#language.types.string.syntax.heredoc" class="link">heredocs</a>
   不同，<a href="language.types.string.html#language.types.string.syntax.nowdoc" class="link">nowdocs</a>
   可在任何静态数据上下文中使用，包括属性声明。
   <div class="example" id="example-174">
    <p><strong>Example #2 示例：使用 nowdoc 初始化属性</strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000">
<span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">class&nbsp;</span><span style="color: #0000BB">foo&nbsp;</span><span style="color: #007700">{<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #FF8000">//&nbsp;自&nbsp;5.3.0&nbsp;起<br />&nbsp;&nbsp;&nbsp;</span><span style="color: #007700">public&nbsp;</span><span style="color: #0000BB">$bar&nbsp;</span><span style="color: #007700">=&nbsp;&lt;&lt;&lt;'EOT'<br /></span><span style="color: #DD0000">bar<br /></span><span style="color: #007700">EOT;<br />}<br /></span><span style="color: #0000BB">?&gt;</span>
</span>
</code></div>
    </div>

   </div>
  </p>
  <blockquote class="note"><p><strong class="note">Note</strong>: 
   <p class="para">
    Nowdoc 支持是在 PHP 5.3.0 新增的。
   </p>
  </p></blockquote>
 </div><hr /><div class="manualnavbar" style="text-align: center;">
 <div class="prev" style="text-align: left; float: left;"><a href="language.oop5.basic.html">基本概念</a></div>
 <div class="next" style="text-align: right; float: right;"><a href="language.oop5.constants.html">类常量</a></div>
 <div class="up"><a href="language.oop5.html">类与对象</a></div>
 <div class="home"><a href="index.html">PHP Manual</a></div>
</div></body></html>
